package com.permissionx.lQl

import android.content.pm.PackageManager
import androidx.fragment.app.Fragment

// typealias给任意类型指定别名
typealias PermissionCallback = (Boolean, List<String>) -> Unit

// 对运行时权限的API进行封装
// 注意这里没有重写onCreateView方法，因此InvisibleFragment不可见
class InvisibleFragment: Fragment() {
    // 定义变量作为运行时权限申请结果的回调通知方式，并声明成一种函数类型变量
    private var callback: PermissionCallback? = null

    // vararg接收可变长度的permissions参数列表
    fun requestNow(cb: PermissionCallback, vararg permissions: String) {
        callback = cb
        // 调用Fragment提供的requestPermissions方法申请运行时权限
        requestPermissions(permissions, 1)
    }

    // 处理运行时权限的申请结果
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        if (requestCode == 1) {

            val deniedList = ArrayList<String>() // 记录所有被用户拒绝的权限
            for ((index, result) in grantResults.withIndex()) { // 遍历grantResults数组
                if (result != PackageManager.PERMISSION_GRANTED) { // 如果某个权限未被用户授权
                    deniedList.add(permissions[index])
                }
            }
            val allGranted = deniedList.isEmpty() // 检查是否所有申请的权限均已被授权
            callback?.let { it(allGranted, deniedList) } // 对运行时权限的申请结果进行回调
        }
    }
}